package ar.com.arkios.kfcon4d.dao;

import ar.com.arkios.kfcon4d.util.EstructuraUtil;
import ar.com.arkios.kfcon4d.util.RegisterBuilder;
import ar.com.arkios.kfconmodelo.modelo.Embalaje;
import ar.com.arkios.j4d.opDataArray;
import java.util.List;
import org.apache.log4j.Logger;

/**
 * <p>
 * 
 * </p>
 */
public class EmbalajeDAO extends GenericDAO<Embalaje> {
    
    private static final Logger miLogger = Logger.getLogger(EmbalajeDAO.class);
    
    /** Nombre de la tabla Embalajes */
    private static final String EMBALAJES = "Embalajes";
    
    /** Nombre de la tabla EmbalajesAtributos */
    private static final String EMBALAJES_ATTR = "EmbalajesAtributos";
    
    // Columnas de la tabla Embalajes
    private static final String EMBALAJES_COD = "Cod";
    private static final String EMBALAJES_DESCRIPCION = "Descripcion";
    
    // Columnas de la tabla EmbalajesAtributos
    private static final String EMBALAJES_ATTR_COD = "Embalaje";
    private static final String EMBALAJES_ATTR_ENTE = "Ente";
    private static final String EMBALAJES_ATTR_AT1 = "Atributo1";
    private static final String EMBALAJES_ATTR_AT2 = "Atributo2";
    
    /** Nombres de las columnas a ser utilizadas de la tabla Embalajes. */
    private static final String[] EMBALAJES_COLUMNAS = {EMBALAJES_COD, EMBALAJES_DESCRIPCION};
    
    /** Nombres de las columnas a ser utilizada como PK de Embalajes. */
    private static final String[] EMBALAJES_PK = {EMBALAJES_COD};
    
    /** Nombres de las columnas a ser utilizadas de la tabla EmbalajesAtributos. */
    private static final String[] EMBALAJES_ATTR_COLUMNAS = {EMBALAJES_ATTR_COD, EMBALAJES_ATTR_ENTE, EMBALAJES_ATTR_AT1, EMBALAJES_ATTR_AT2};

    /** Nombres de las columnas a ser utilizada como PK de EmbalajesAtributos. */
    private static final String[] EMBALAJES_ATTR_PK = {EMBALAJES_ATTR_COD};
    

    @Override
    protected String getEntidadTableName() {
        return EMBALAJES;
    }

    @Override
    protected String getEntidadAtributoTableName() {
        return EMBALAJES_ATTR;
    }

    @Override
    protected String getPKProperty() {
        return "miCodigo";
    }

    @Override
    protected opDataArray[] mapListEntidadTo4D(List<Embalaje> laLista) {
        opDataArray[] losDatosEmbalajes = new opDataArray[getMiEntidadFields().mSize];

        for (int i = 0; i < losDatosEmbalajes.length; i++) {
            losDatosEmbalajes[i] = new opDataArray(laLista.size());
        }

        int i = 0;
        for (Embalaje embalaje : laLista) {            
            RegisterBuilder embalajesRegisterBuilder = new RegisterBuilder(getMiEntidadFields());
            embalajesRegisterBuilder.setData(EMBALAJES_COD, embalaje.getMiCodigo());
            embalajesRegisterBuilder.setData(EMBALAJES_DESCRIPCION, embalaje.getMiDescripcion());
            
            opDataArray dataAux = embalajesRegisterBuilder.getDataArray();
            for (int j = 0; j < getMiEntidadFields().mSize; j++) {
               losDatosEmbalajes[j].mDataArray[i] = dataAux.mDataArray[j];
            }
            i += 1;
        }
        return losDatosEmbalajes;
    }

    @Override
    protected opDataArray[] mapListEntidadAtributosTo4D(List<Embalaje> laLista) {
        opDataArray[] losDatosEmbalajesAtributos = new opDataArray[getMiEntidadAtributosFields().mSize];

        for (int i = 0; i < losDatosEmbalajesAtributos.length; i++) {
            losDatosEmbalajesAtributos[i] = new opDataArray(laLista.size());
        }

        int i = 0;
        for (Embalaje embalaje : laLista) {            
            RegisterBuilder embalajesAtributosRegisterBuilder = new RegisterBuilder(getMiEntidadAtributosFields());
            embalajesAtributosRegisterBuilder.setData(EMBALAJES_ATTR_COD, embalaje.getMiCodigo());
            embalajesAtributosRegisterBuilder.setData(EMBALAJES_ATTR_ENTE, EstructuraUtil.SAP);
            embalajesAtributosRegisterBuilder.setData(EMBALAJES_ATTR_AT1, embalaje.getMiEspecieCod());
            embalajesAtributosRegisterBuilder.setData(EMBALAJES_ATTR_AT2, embalaje.getMiEnvaseCod());
            
            opDataArray dataAux = embalajesAtributosRegisterBuilder.getDataArray();
            for (int j = 0; j < getMiEntidadAtributosFields().mSize; j++) {
               losDatosEmbalajesAtributos[j].mDataArray[i] = dataAux.mDataArray[j];
            }
            i += 1;
        }
        return losDatosEmbalajesAtributos;
    }
    
    @Override
    protected String[] getEntidadFieldsNames(){
        return EMBALAJES_COLUMNAS;
    }
    
    @Override
    protected String[] getEntidadAtributosFieldsNames() {
        return EMBALAJES_ATTR_COLUMNAS;
    }
    
    @Override
    protected String[] getEntidadPKFieldsNames(){
        return EMBALAJES_PK;
    }
    
    @Override
    protected String[] getEntidadAtributosPKFieldsNames() {
        return EMBALAJES_ATTR_PK;
    }
}